package com.md5;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class CompareClass {
	String Path ;   // 记录的文件地址

	/**
	 * 将比对信息记录入文件? 当有新增文件夹时,会报错。
	 * 
	 * @param url
	 * @param path
	 * @throws Exception
	 */
	public static void WriteTxtAndCopy(File url, String path) throws Exception {
 		FileWriter fileWriter = new FileWriter(path, true);
		fileWriter.write(url.getAbsolutePath() + "\r\n");
		fileWriter.flush();
		System.out.println(url.getAbsolutePath()); //写入文件
		
		String oneFolderPath = url.getAbsolutePath();
		String[] a = oneFolderPath.split(":");
		String endClass = a[1]; // D盘符的后几位(实际文件的目录)
		
	
		 int c = endClass.lastIndexOf("\\");    
		 String end=endClass.substring(1,c);           //文件目录位置
		File file1 = new File("C:\\" + end);
		
		//System.out.println("C:\\" + end);
		if(!file1.exists()){
			file1.mkdirs();
		}
		File fileClass = new File("C:" + endClass);
		//如果是文件夹
		String realPath = "C:" + endClass;
		if(realPath.indexOf(".")==-1){
			//如果写入的是文件夹就不复制
			fileWriter.write("有新加了文件夹啊啊啊ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff手动添加 地址:"+realPath+ "\r\n");
			fileWriter.flush();
		}else{
			GuWeiUtil.copyFile(url, fileClass);	
 		}
										   
		
		//将文件复制进
	}

	/**
	 * 比较文件是否存在
	 * 
	 * @param oneFolder
	 * @throws Exception
	 */
	public boolean compareFolderIsExist(File oneFolder) throws Exception {
		String oneFolderPath = oneFolder.getAbsolutePath();
		String[] a = oneFolderPath.split(":");
		String end = a[1]; // D盘符的后几位
		File oldFile = new File("E:" + end);    //旧的版本
		if (oldFile.exists()) {
			return true;
		} else {
			// 并记录入文件
			WriteTxtAndCopy(oneFolder, Path);
			return false;
		}
	}

	/**
	 * 比较一个文件的Md5,也要判断该文件是否存在
	 * 
	 * @param oneFolder
	 * @throws Exception
	 */
	public void compareMd5(File newFolder) throws Exception {
		String oneFolderPath = newFolder.getAbsolutePath();
		String[] a = oneFolderPath.split(":");
		String end = a[1]; // D盘符的后几位
		File oldFile = new File("E:" + end); // 老的文件
		if(!oldFile.exists()){
			//如果老的文件下没有这个文件 
			WriteTxtAndCopy(newFolder, Path);   
			return;                     //如果没有就返回
		}
		
		File newFile = newFolder;
		String oldMd5 = MD5FileUtil.getFileMD5String(oldFile);
		String newMd5 = MD5FileUtil.getFileMD5String(newFile);

		if (oldMd5.equals(newMd5)) {
			// 如果相同不做操作
		} else {
			// 并记录入文件
			WriteTxtAndCopy(newFolder, Path);
		}
	}

	/**
	 * 递归比较文件
	 * 
	 * @param rightAddress
	 * @param leftAddress
	 * @throws IOException
	 */
	public void compareClassFolder(File newECM) throws Exception {
		// 先判断文件是否存在
		if (compareFolderIsExist(newECM)) {
			File[] files = newECM.listFiles();
			for (File newPathfile : files) {
				if (newPathfile.isDirectory()) {
					compareClassFolder(newPathfile); // 文件夹的话就 递归比较
				} else {
					// 如果是文件就执行比较方法
					compareMd5(newPathfile);
				}
			}
		} else {
			// 不存在就不执行
		}

	}

	public static void main(String[] args) {
		
		CompareClass c = new CompareClass();
		c.Path= "D:/guwei.txt";   // 记录的文件地址
		try {
			File f = new File("D:/classes");  //另外的文件放在E盘相同位置
			c.compareClassFolder(f);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	 
//		String a=" \\SunECMConsole\\applet\\SunECM.store";
//		
//		 int a1 = a.lastIndexOf("\\");
//		 
//		 a=a.substring(1,a1);
//		 System.out.println(a);
	}
}
